/*
* @File    :   index.js
* @Time    :   2024/03/24 16:44:19
* @Author  :   chakcy
* @Email   :   947105045@qq.com
* @description   :   本地JWT加密解密
*/

const jwt = require('jsonwebtoken')
const crypto = require('crypto');

// JWT类，用于本地JWT加密解密
class JWT {
    constructor() {
        this.secretKey = null; // 生成一个随机的密钥
    }
    // 生成一个随机的密钥
    generateSecretKey() {
        return crypto.randomBytes(32).toString('hex'); // 生成一个32字节的随机数并转换为十六进制字符串  
    }
    // 对payload进行签名
    sign(payload) {
        this.secretKey = this.generateSecretKey(); // 生成一个随机的密钥
        return jwt.sign(payload, this.secretKey, { expiresIn: '1h' }); // 签名并设置过期时间为1小时
    }
    // 验证token
    verify(token) {
        return new Promise((resolve, reject) => {
            jwt.verify(token, this.secretKey, (err, message) => {
                if (err) {
                    reject(err)
                } else {
                    resolve(message)
                }
            })
        })
    }
}

module.exports = {
    jwt: new JWT()
}